分享人:甘乐
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
JJSP 所包含的元素,包括JSP 注释、声明、表达式、程序段、JSP 指令(Directive Elements)、 JSP 动作(Action Elements)以及JSP 异常处理。
JSP 的内置对象是指在JSP 页面系统中已经默认内置的Java 对象,这些对象不需要开发人员显式 声明即可使用,也被称为隐式对象(Implicit Objects)或预定义变量(pre-defined variables)。
1.内置对象的作用范围(Scope)
作用范围指每个内置对象的某个实例在多长的时间和多大的范围内有效,即在什么样的范围内可以 有效地访问同一个对象实例。在JSP 中,定义了四种作用范围,即:Application、Session、Page 和Request,它们代表了对象各 自的“生命周期”。
(1)Application Scope :起始于服务器开始运行,application对象被创建之时;终止于服务器关闭之时。
(2)Session Scope :用户请求访问服务器时session 对象开始生效,用户断开退出时session 对象失效。
(3)Request Scope :在一个JSP 页面向另一个JSP 页面提出请求到请求完成之间,在完成请求后此范围即结束。(使用
(4)Page Scope :仅限于获取本页的数据。
2.内置对象
(1)application 对象
application 对象拥有 application 的范围,也就是说application 用于在多个用户间保存 数据,所有用户都共享同一个application,因此从中读取和写入的数据都是共享的。
服务器启动后,一旦创建了application 对象,那么这个application 对象将会永远保持下去,直到服务器关闭为止。 由于 application 对象具有在所有客户端共享数据的特点,因此经常用于记录所有客户端公用的一些数据,例如页面访问次数。
(2)config 对象
config 对象中存储着一些servlet 初始的数据结构,它跟page 对象一样,很少被用到。 config 对象实现了javax.servlet.ServletConfig 接口,它提供两个方法来让config 对象获取Servlet 初始参数值:
config.getInitParamenterNames()
config.getInitParamenter (String name)
另外,也可以利用config.getServletName()来获取JSP 页面被编译后的Servlet 名称。
(3)exception对象
当JSP 页面发生错误时,会产生异常。而exception 就是用来针对异常作出相应处理的对象。要使用该内置对象,必须在page 命令中设定<%@ page isErrorPage=”true”%>,否则编译会出现错误。
(4)out对象
out 是用于向客户端输出的PrinterWriter 对象。这里的out 实际上是带有缓冲特性的PrinterWriter,可以称之为JspWriter。缓冲区容量是可以设置的,甚至也可以关闭,只要通过page 指令的buffer 属性就可以达到此目的。
(5)page对象
page 对象代表JSP 本身,或者说它代表了被转换后的Servlet,因此它可以调用任何被Servlet 类所定义的方法。
(6)pageContext对象
pageContext 能够存取其他内置对象,当内置对象包括属性时,pageContext 也支持对这些属性的读取和写入。
(7)request 对象
与request 相联系的是HttpServletRequest 类。通过getParameter 方法可以得到request的参数,通过GET、POST、HEAD 等方法可以得到request 的类型,通过cookies,Referer,等可以得到引入的HTTP 头。
(8)response 对象
与response 相联系的是HttpServletResponse 类,用于控制HTTP 连接。因为输出流是放入缓冲的,所以可以设置HTTP状态码和response 头。主要用于向客户端发送数据,如Cookie、HTTP 文件头等信息。
(9)session 对象
session 用来分别保存每一个用户的信息,使用session,可以轻易的识别每一个用户,然后针对每个用户的要求,给予正确的响应。因此,在网上购物时购物车中最常使用的就是session。当用户把物品放入购物车时,就可以将用户选定的商品信息存放在session 中,当需要进行付款等操作时,又可以将session 中的信息取出来。
<%@page %>指令有session=”true|false”属性指明 session 对象是否可用,如果指定为false 就无法创建session 对象,当然也无法定义 session 相关属性。默认值为true。
用户关闭浏览器是否就结束了session scope?
当首次请求服务器上的JSP页面时,服务器会生成一个 session对象,具有一个服务器上唯一的ID号——session ID ,同时这个ID号会被发送 到客户端,存放到客户的cookie中。session的创建和销毁由服务器端控制。当浏览器 关闭后,session还停留在服务器端;当浏览器重新发送请求到服务器,会创建另一个 session,这个时候的session ID已经不一样了,也就不能访问上一次的session里的内容。
如果一定的时间内客户端没有反应,则认为会话结束。Tomcat 的默认session有效期是30分钟。
内置对象中response 的sendRedirect()方法,在使用中同
使用<\jsp:forward>对浏览器来说是透明的,浏览器并不知道为其服务的Servlet 已经换成Servlet2了,它只知道发出了一个请求,获得了一个响应。显示的URL始终是原始请求的URL。
调用response.sendRedirect()方法,实际上是告诉浏览器Servlet2所在的位置, 让浏览器重新访问Servlet2。调用sendRedirect()方法,会在响应中设置Location响应报头。这个过程对于用 户来说是透明的,浏览器会自动完成新的访问。浏览器的地址栏中,显示的URL是重定向之后的URL。
response.sendRedirect()特点
(1)地址栏内容有变化。
(2)sendRedirect()方法后的语句继续执行, 所以在此语句后面的有向客户端传送信息的语句时候会出现闪烁现象。
(3)sendRedirect()方法参数可以是URL地址也可以是jsp页面名称。
(4)如果写成sendRedirect(“/a.jsp”),'/'表示http://127.0.0.1/, 该路径并不包含在当前页面所在的webapp目录下;而sendRedirect(“a.jsp”)表示转到webapp目录 下的其他页面。
<\jsp:forward>特点
(1)地址栏内容没有变化。
(2)
(3)如果写成
(4)包含此跳转指令的页面可以向要跳转到的页面传递参数。
JSP 应用开发技术. 贾素玲 王强 张成 编著. 清华大学出版社
今天的分享就到这里,感谢诸君围观!